import axios from 'axios'
const request = {
    // 对axios进行配置和初始化
    init() {
        // 添加请求拦截器
        axios.interceptors.request.use(function (config) {
            // 在发送请求之前做些什么
            // 给配置中添加请求头
            config.headers = { "token": localStorage.getItem("token") }
            return config;
        }, function (error) {
            // 对请求错误做些什么
            return Promise.reject(error);
        });

        // 添加响应拦截器
        axios.interceptors.response.use(function (response) {
            // 2xx 范围内的状态码都会触发该函数。
            // 对响应数据做点什么
            // 对于checkLogin请求不做处理

            if (!response.config.url.endsWith("/checkLogin") && !response.config.url.endsWith("/getCode") && response.data.code == 909) {
                // 未登录状态,进入登陆页面
                localStorage.removeItem("token"); // 删除token
                location.href = "/";// 进入首页
            }
            return response;
        }, function (error) {
            // 超出 2xx 范围的状态码都会触发该函数。
            // 对响应错误做点什么
            return Promise.reject(error);
        });
    },
    /**
     * GET请求
     * @param {*} url 请求的url
     * @param {*} callback 回调函数
     */
    get(url, callback) {
        this.init();
        axios.get(url).then(res => {
            if (res.data.code == 908) {
                // 续签token
                let data = res.data;
                // 重新设置token
                localStorage.setItem("token", data.msg);
                // 重新发送请求
                this.get(url, callback);
            } else {
                // 正常处理
                callback(res.data);
            }
        });
    },
    /**
     * POST请求
     * @param {*} url  
     * @param {*} data 请求参数，以对象的形式提交，默认是JSON格式
     * @param {*} callback  回调函数
     */
    post(url, data, callback) {
        this.init();
        axios.post(url, data).then(res => {
            if (res.data.code == 908) {
                // 续签token
                let data = res.data;
                // 重新设置token
                localStorage.setItem("token", data.msg);
                // 重新发送请求
                this.post(url, data, callback);
            } else {
                // 正常处理
                callback(res.data);
            }
        });
    }, put(url, data, callback) {
        this.init();
        axios.put(url, data).then(res => {
            if (res.data.code == 908) {
                // 续签token
                let data = res.data;
                // 重新设置token
                localStorage.setItem("token", data.msg);
                // 重新发送请求
                this.put(url, data, callback);
            } else {
                // 正常处理
                callback(res.data);
            }
        });
    }, delete(url, callback) {
        this.init();
        axios.delete(url).then(res => {
            if (res.data.code == 908) {
                // 续签token
                let data = res.data;
                // 重新设置token
                localStorage.setItem("token", data.msg);
                // 重新发送请求
                this.delete(url, callback);
            } else {
                // 正常处理
                callback(res.data);
            }
        });
    }
}
// 暴漏request
export default request;